package com.jrx.anytxn.param.mapper.ext;

import com.jrx.anytxn.common.annotation.ParamTuningAnnotation;
import com.jrx.anytxn.param.entity.PrProductTable;
import com.jrx.anytxn.param.mapper.base.PrProductTableMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 产品表的 mapper扩展
 *
 * @author Qingyao Xing
 * @date 2019/9/27 16:13
 */
public interface ExtPrProductTableMapper extends PrProductTableMapper {
    /**
     * 根据字段查询
     *
     * @param productId,status,organizationId
     * @return PrProductTable
     */
    PrProductTable selectByProductIdAndOrgIdAndStatus(@Param("productId") String productId, @Param("organizationId") String organizationId, @Param("status") String status, @Param("tenantId") String tenantId);

    /**
     * 根据字段查询  不确定有无？？？？
     *
     * @param productId,status
     * @return PrProductTable
     */
    PrProductTable selectByProductIdAndStatus(@Param("productId") String productId, @Param("status") String status, @Param("tenantId") String tenantId);

    /**
     * 根据租户ID查询所有
     *
     * @param tenantId 租户ID
     * @return java.util.List<com.jrx.anytxn.param.entity.PrProductTable>
     * @author fan.yang
     * date: 2019/10/14 0014 上午 10:11
     */
    List<PrProductTable> selectByTenId(@Param("tenantId") String tenantId, @Param("status") String status);

    /**
     * @MethodName: selectProductByProductId
     * @Description: 根据产品ID查询产品信息（产品期数单位）
     * @Param: [productId]
     * @Return: com.jrx.anytxn.param.dto.product.ProductTableRes
     * @Author: fan.yang
     * @Time: 下午 19:42
     */
    PrProductTable selectProductByProductId(@Param("productId") String productId, @Param("tenantId") String tenantId);

    /**
     * 根据机构号和租户Id获取产品集合
     *
     * @param orgId    机构号
     * @param tenantId 租户Id
     * @return java.util.List<com.jrx.anytxn.param.entity.PrProductTable>
     * @author fan.yang
     * date: 2019/10/14 0014 上午 11:00
     */
    List<PrProductTable> selectProductByOrgIdAndTenId(@Param("orgId") String orgId, @Param("tenantId") String tenantId);

    /**
     * 根据租户ID和产品ID查询此信息
     *
     * @param tenantId  租户ID
     * @param productId 产品ID
     * @return com.jrx.anytxn.param.entity.PrProductTable
     * @author fan.yang
     * date: 2019/10/14 0014 上午 9:48
     */
    PrProductTable selectByTenIdAndProId(@Param("tenantId") String tenantId, @Param("productId") String productId);

    /**
     * 根据租户ID和产品ID删除信息
     *
     * @param tenantId  租户ID
     * @param productId 产品ID
     * @return int
     * @author fan.yang
     * date: 2019/10/14 0014 上午 10:48
     */
    @ParamTuningAnnotation
    int deleteByTenIdAndProId(@Param("tenantId") String tenantId, @Param("productId") String productId);

    /**
     * 根据租户ID和产品ID字段更新
     *
     * @param productTable 产品
     * @return int
     * @author fan.yang
     * date: 2019/10/14 0014 上午 10:42
     */
    @ParamTuningAnnotation
    int updateByTenIdAndProId(PrProductTable productTable);

    /**
     * 获取所有的产品信息
     * @return
     */
    List<PrProductTable> findAllForBatch(@Param("tableStatus") String tableStatus);

    /**
     * 获取需要催收的产品列表
     */
    List<String> findByTableStatusAndCollectionFlag(@Param("tableStatus") String tableStatus,@Param("collectionFalg") String collectionFalg);

    /**
     * 获取需要代偿回购的产品列表
     */
    List<String> findByTableStatusAndGuaranteeFlag(@Param("tableStatus") String tableStatus,@Param("guaranteeFlag") String guaranteeFlag);

    /**
     * 获取需要生成对账文件的产品列表
     */
    List<PrProductTable> findByVerifyFileFlag(@Param("tableStatus") String tableStatus,@Param("verifyFileFlag") String verifyFileFlag);
}